/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Model;

import Entity.Dosen;
import Entity.DosenPemilikKarya;
import Entity.PublikasiKaryaDosen;
import Entity.User;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import library.Koneksi;

/**
 *
 * @author user
 * model untuk menangani operasi database berkaitan dengan dosen yang mempublikasikan karya ilmiah
 */
public class DaftarPemilikKarya {

    DosenPemilikKarya dosenPemilikKarya;

    //method digunakan untuk menambah data pemilik publikasi karya ilmiah
    public boolean tambahTimDosenKaryaIlmiah(DosenPemilikKarya dosen) {

        boolean hasil = false;
        this.dosenPemilikKarya = dosen;
        String sql;
        if (dosen.getNamaPeneliti() != null) {
            sql = "insert into pemilik_karya_eksternal(NO_PUBLIKASI, NAMA_PENELITI_KARYA) "
                    + "value(" + this.dosenPemilikKarya.getPublikasiKarya().getNoPublikasi()
                    + ", '" + this.dosenPemilikKarya.getNamaPeneliti()
                    + "')";
        } else {
            sql = "insert into dosen_pemilik_karya(ID_USER, NO_PUBLIKASI, STATUS_PENGUPLOAD) "
                    + "value('" + this.dosenPemilikKarya.getDosen().getUser().getIdUser()
                    + "', " + this.dosenPemilikKarya.getPublikasiKarya().getNoPublikasi()
                    + ", '" + this.dosenPemilikKarya.getStatusPengupload()
                    + "')";
        }
        System.out.println(sql);
        PreparedStatement st = null;
        try {
            Connection conn = Koneksi.getKoneksi();
            st = conn.prepareStatement(sql);
            int rs = st.executeUpdate();
            if (rs > 0) {
                hasil = true;
            } else {
                return false;
            }
        } catch (SQLException ex) {
            Logger.getLogger(DaftarPemilikKarya.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                st.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPemilikKarya.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return hasil;

    }

    //method digunakan untuk menghapus data pemilik publikasi karya ilmiah
    public boolean hapusDosenPemilikKarya(DosenPemilikKarya dosen) {

        boolean hasil = true;

        PreparedStatement st = null;

        String sql = "DELETE FROM dosen_pemilik_karya WHERE ID_USER = '" + dosen.getDosen().getUser().getIdUser() + "' AND NO_PUBLIKASI = " + dosen.getPublikasiKarya().getNoPublikasi();

        Connection conn = Koneksi.getKoneksi();
        try {
            st = conn.prepareStatement(sql);
            int rs = st.executeUpdate();
            if (rs > 0) {
                hasil = true;
            } else {
                sql = "DELETE FROM pemilik_karya_eksternal WHERE ID_PEMILIK = "+dosen.getDosen().getUser().getIdUser()+" AND NO_PUBLIKASI = "+dosen.getPublikasiKarya().getNoPublikasi();
                st = conn.prepareStatement(sql);
                rs = st.executeUpdate();
                if(rs > 0){
                    hasil = true;
                }else{
                    hasil = false;
                }
            }
        } catch (SQLException ex) {
            Logger.getLogger(DaftarPemilikKarya.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                st.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPemilikKarya.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return hasil;

    }

    //method digunakan untuk mengambil data daftar pemilik publikasi karya ilmiah(internal)
    public List<DosenPemilikKarya> ambilDosenPemilikKarya(PublikasiKaryaDosen karyaIlmiah) {

        List<DosenPemilikKarya> listDosenPemilikKarya = new ArrayList<DosenPemilikKarya>();

        String sql = "SELECT * FROM publikasi_karya_dosen AS A, dosen_pemilik_karya AS B, user AS C, dosen AS D "
                + "WHERE A.NO_PUBLIKASI = B.NO_PUBLIKASI "
                + "AND B.ID_USER = D.ID_USER AND D.ID_USER = C.ID_USER "
                + "and A.NO_PUBLIKASI = " + karyaIlmiah.getNoPublikasi();
        PreparedStatement st = null;
        ResultSet rs = null;
        try {

            Connection conn = Koneksi.getKoneksi();

            st = conn.prepareStatement(sql);
            rs = st.executeQuery();

            while (rs.next()) {
                this.dosenPemilikKarya = new DosenPemilikKarya();

                User user = new User();
                user.setIdUser(rs.getString("ID_USER"));
                user.setNamaUser(rs.getString("NAMA_USER"));
                
                Dosen dosen = new Dosen();
                dosen.setUser(user);

                karyaIlmiah.setNoPublikasi(rs.getInt("NO_PUBLIKASI"));

                this.dosenPemilikKarya.setDosen(dosen);
                this.dosenPemilikKarya.setPublikasiKarya(karyaIlmiah);
                this.dosenPemilikKarya.setStatusPengupload(rs.getString("STATUS_PENGUPLOAD"));

                listDosenPemilikKarya.add(this.dosenPemilikKarya);
            }
        } catch (SQLException ex) {
            Logger.getLogger(DaftarPemilikKarya.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                st.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPemilikKarya.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                rs.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPemilikKarya.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return listDosenPemilikKarya;

    }
    
    //method digunakan untuk mengambil data daftar pemilik publikasi karya ilmiah(eksternal)
    public List<DosenPemilikKarya> ambilDosenPemilikKaryaEksternal(PublikasiKaryaDosen karyaIlmiah) {

        List<DosenPemilikKarya> listDosenPemilikKarya = new ArrayList<DosenPemilikKarya>();

        String sql = "SELECT * FROM publikasi_karya_dosen AS A, pemilik_karya_eksternal AS B "
                + "WHERE A.NO_PUBLIKASI = B.NO_PUBLIKASI "
                + "and A.NO_PUBLIKASI = " + karyaIlmiah.getNoPublikasi();
        PreparedStatement st = null;
        ResultSet rs = null;
        try {

            Connection conn = Koneksi.getKoneksi();

            st = conn.prepareStatement(sql);
            rs = st.executeQuery();

            while (rs.next()) {
                this.dosenPemilikKarya = new DosenPemilikKarya();

                User user = new User();
                user.setIdUser(rs.getString("ID_PEMILIK"));
                
                Dosen dosen = new Dosen();
                dosen.setUser(user);
                
                karyaIlmiah.setNoPublikasi(rs.getInt("NO_PUBLIKASI"));

                this.dosenPemilikKarya.setDosen(dosen);
                this.dosenPemilikKarya.setNamaPeneliti(rs.getString("NAMA_PENELITI_KARYA"));
                this.dosenPemilikKarya.setPublikasiKarya(karyaIlmiah);

                listDosenPemilikKarya.add(this.dosenPemilikKarya);
            }
        } catch (SQLException ex) {
            Logger.getLogger(DaftarPemilikKarya.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                st.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPemilikKarya.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                rs.close();
            } catch (SQLException ex) {
                Logger.getLogger(DaftarPemilikKarya.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return listDosenPemilikKarya;

    }
    
    //method digunakan untuk mengecek apakah data pemilik publikasi karya ilmiah telah terdapat di database
    public boolean cekTimDosen(DosenPemilikKarya dosen){
        
        Connection conn = Koneksi.getKoneksi();
        PreparedStatement st = null;
        boolean hasil = true;
        
        try {
            String sqlCek = "select * from dosen_pemilik_karya where ID_USER = '"+dosen.getDosen().getUser().getIdUser()+"' and NO_PUBLIKASI = "+dosen.getPublikasiKarya().getNoPublikasi();
            st = conn.prepareStatement(sqlCek);
            ResultSet rs = st.executeQuery();
            rs.last();
            int row = rs.getRow();
            if(row > 0 ){
                hasil = false;
            } else{
                hasil = true;
            }
        } catch (SQLException ex) {
            Logger.getLogger(DaftarDosenPeneliti.class.getName()).log(Level.SEVERE, null, ex);
        }        
        
        return hasil;
        
    }
    
}
